#ifndef PLCSCOPESTACK_H_
#define PLCSCOPESTACK_H_

#include <stack>
#include <plc2llvm/PLCScope.h>

//单例类
class PLCScopeStack {
private:
    static PLCScopeStack* plcStack;
    //栈本身
    std::stack<PLCScope*> scopeStack;
    //全局作用域
    PLCScope* globalScope;
    PLCScopeStack();
    //初始化全局作用域，创建全局作用域、加入内置类型等
    void globalScopeInit();

public:
    ~PLCScopeStack();
    static PLCScopeStack* getScopeStack();
    static PLCScope* getTopScope();
    static void push(PLCScope* scope);
    static void pop();
};


#endif